﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller;
using Interfaces;

namespace GUI
{
    public partial class FrmVirksomhedsType : Form
    {
        
        private vandspareSystem VandspareSystem; // Associering til vandsparesystem

        private int tmpKundenr;

        // Aø
        public FrmVirksomhedsType(int kundenr, vandspareSystem VandspareSystem)
        {
            this.VandspareSystem = VandspareSystem;     
            InitializeComponent();
            
            OpdaterKendteInstallationer();
            OpdaterSkabelonCombobox();
            tmpKundenr = kundenr;
        }

        // AØ fylder listviewet "Kendte installationer" med data
        public void OpdaterKendteInstallationer()
        {
            lstKendteInstallationer.Items.Clear();
            List<IInstallation> StandardInstallationsData = VandspareSystem.FindStandard(); // Mads edit - StandardInstallationsData & FindStandard()

            
            for (int i = 0; i < StandardInstallationsData.Count; i++)
            {
                string installationsnavn = StandardInstallationsData[i].Betegnelse.ToString();
                
                ListViewItem installation = new ListViewItem(StandardInstallationsData[i].Betegnelse.ToString());
                installation.SubItems.Add(StandardInstallationsData[i].Forbrugspct.ToString());
                
                lstKendteInstallationer.Items.Add(installation);
            }
        }


        // AØ fyld comboboks med virksomhedsdata skabelonsdata - dvs. fra kundenr 0.
        public void OpdaterSkabelonCombobox()
        {
            cboSkabelon.Items.Clear();

            for (int i = 1; i < VandspareSystem.KundeDataCount(0); i++) // Kundenr 0 = default kunde
            {
                cboSkabelon.Items.Add(VandspareSystem.FindVirksomhedsDataNavn(i, 0).ToString());
            }
        }


        //AØ  Action når der vælges en linie i comboboksen - smider data fra valgt skabelon ned i listviewet.
        private void cboSkabelon_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstAktiveInstallationer.Items.Clear();
            
            string virksomhedsdatanavn;

            if (cboSkabelon.SelectedIndex != -1)
            {
                virksomhedsdatanavn = Convert.ToString(cboSkabelon.SelectedItem);
                List<IInstallation> Installationer = VandspareSystem.FindAktiveInstallationer(virksomhedsdatanavn);

                for (int i = 0; i < Installationer.Count; i++)
                {
                    
                    string installationsnavn = Installationer[i].ToString();

                    // Opretter item med betegnelse og forbrugspct. til listviewet.
                    ListViewItem installation = new ListViewItem(Installationer[i].Betegnelse.ToString());
                    installation.SubItems.Add(Installationer[i].Forbrugspct.ToString());

                    // Føjer element til listviewet
                    lstAktiveInstallationer.Items.Add(installation);
                }
            }
        }

        // AØ Gem virksomhedstype og tilhørende installationer
        private void btnOpretVirksomhedstype_Click(object sender, EventArgs e)
        {
            string navn = txtVirksomhedstypenavn.Text;
            if (txtVirksomhedstypenavn.Text == "")
            {
                picVirkNavn.Visible = true;
                tooltip(picVirkNavn, "Indtast venligst et navn til virksomheden");
            }
            else
            {
                picVirkNavn.Visible = false;
                double forbrugpct;
                string betegnelse;

                int kundenr = tmpKundenr;

                if (lstAktiveInstallationer.Items.Count == 0)
                {
                    MessageBox.Show("Der skal vælges minimum 1 installation!");
                    return;
                }
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                //TJEK - TO DO - Hver installation skal gemmes i en ny (installations)liste som navngives iflg. text boksen.
                // Installationerne gemmes vha. en tekst og en værdi.
                // Installationer tages fra lstAktiveInstallationer
               VandspareSystem.RydTempListe();
                for (int i = 0; i < lstAktiveInstallationer.Items.Count; i++) // Sålænge der er virksomhedsdata
                {
                    betegnelse = Convert.ToString(lstAktiveInstallationer.Items[i].SubItems[0].Text);
                    forbrugpct = Convert.ToInt32(lstAktiveInstallationer.Items[i].SubItems[1].Text);
                    

                    // TJEK - TO DO lav et metodekald der gemmer alle installationerne under den nuværende virksomhedstypes liste (via virkTypeId) med installationer
                    VandspareSystem.ModtagTempInstallation(betegnelse, forbrugpct);
                }                
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                // TJEK - TO DO lav et metodekald for gem virksomhedstype til controlleren der gemmer i modellen og i databasen
                if (VandspareSystem.OpretVirksomhedsdata(navn, kundenr) && kundenr != 0)
                {
                    this.DialogResult = DialogResult.OK;
                    this.Close();
                }
                else if (kundenr == 0)
                {
                        cboSkabelon.Items.Add(txtVirksomhedstypenavn.Text);
                        txtVirksomhedstypenavn.Clear();
                        lstAktiveInstallationer.Items.Clear();
                }
                else
                {
                    MessageBox.Show("Der er desværre sket en fejl i oprettelsen af virksomhedstypen" + "\r\n" + "Tjek venligst at alle data er korrekte");
                }
                lblStatus.Text = "Ny virksomhedstype oprettet";
            }
        }


        private void tooltip(PictureBox pic, string besked)
        {
            ToolTip toolTip = new ToolTip();
            toolTip.IsBalloon = true;
            toolTip.SetToolTip(pic, besked);
        }

        // TJEK - TO DO Brug btnNyInstallation - Skal gemme en ny installation under default brugeren vha. de to tekstbokse    TJEK
        // AØ tilføjer ny installation til default-listen
        private void btnTilfoejInstallation_Click(object sender, EventArgs e)
        {
            int point = 0;
            double forbrugpct;
            string betegnelse;

            if (txtInstallationsnavn.Text == "")
            {
                picInsNavn.Visible = true;
                tooltip(picInsNavn, "Indtast venligst et navn til installationen");
                point++;
            }
            else picInsNavn.Visible = false;

            if (txtForbrugsPct.Text == "" || !InputValidator.DOUBLE(txtForbrugsPct.Text))
            {
                picPct.Visible = true;
                tooltip(picPct, "Indtast venligst forbrug på installation");
                point++;
            }
            else picPct.Visible = false;

            if (point == 0)
            {
                picPct.Visible = false; picInsNavn.Visible = false;
                forbrugpct = Convert.ToDouble(txtForbrugsPct.Text);
                betegnelse = txtInstallationsnavn.Text;

                // Virksomhedsid = 1 dvs. første skridt er at gemme installationen under default virksomhedsdata.
                int virksomhedsid = 1;

                if (Convert.ToDouble(txtForbrugsPct.Text) > 100 || Convert.ToDouble(txtForbrugsPct.Text) <= 0)
                {
                    MessageBox.Show("Forbrug må ikke overstige 100 % eller være under 1 %");
                    txtForbrugsPct.Focus();
                    return;
                }
                
                if (VandspareSystem.TilfoejInstallation(forbrugpct, betegnelse, virksomhedsid))
                {
                    OpdaterKendteInstallationer();
                    MessageBox.Show("Installationen er oprettet");
                    txtInstallationsnavn.Clear();
                    txtForbrugsPct.Clear();
                    return;
                }
                else
                {
                    MessageBox.Show("Der er desværre sket en fejl under oprettelsen! - Tjek database status");
                }

            }
            
        }


        // TJEK - TO DO brug btnBrugInstallation - skal smide valgt installation fra listView over i listview med aktiveInstallationer      TJEK
        // AØ brug installation
        private void btnBrugInstallation_Click(object sender, EventArgs e)
        {
            try
            {

            int selectedIndex = lstKendteInstallationer.SelectedIndices[0];

            double forbrugpct;
            string betegnelse;

            ListViewItem installationslinie = lstKendteInstallationer.Items[selectedIndex];

            betegnelse = Convert.ToString(installationslinie.SubItems[0].Text);
            forbrugpct = Convert.ToInt32(installationslinie.SubItems[1].Text);

            /////////////////// Send valgt installation til aktive installationer \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
            double aktiveInstallationerSum = 0;

            // AØ tjekker at det procentvise forbrug for aktiveInstallationer ikke overstiger 100%
            for (int i = 0; i < lstAktiveInstallationer.Items.Count; i++) // Sålænge der er virksomhedsdata
            {
                int tmpForbrugpct = Convert.ToInt32(lstAktiveInstallationer.Items[i].SubItems[1].Text);
                aktiveInstallationerSum = aktiveInstallationerSum + tmpForbrugpct;
            }
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////
            // TJEK - TO DO - TJEK OM SUMMEN AF INSTALLATIONSPCT giver over 100!
            if ((aktiveInstallationerSum+forbrugpct) > 100)
            {
                MessageBox.Show("Installationernes samlede forbrug overstiger 100%" + "\r\n"  + "Tjek at installationerne er korrekte.");          
            }
            else
            {
                ListViewItem aktivInstallation = new ListViewItem(betegnelse);
                aktivInstallation.SubItems.Add(forbrugpct.ToString());

                lstAktiveInstallationer.Items.Add(aktivInstallation);
            }
           }
            catch (Exception)
            {
                MessageBox.Show("Vælg en installation til kundens virksomhed");
            }
        }


        // AØ Sletter installation fra listView med installationer der skal gemmes.
        private void btnSletInstallation_Click(object sender, EventArgs e)
        {
            try
            {
                int selectedIndex = lstAktiveInstallationer.SelectedIndices[0];
                ListViewItem valgtInstallation = lstAktiveInstallationer.Items[selectedIndex];
                lstAktiveInstallationer.Items.Remove(valgtInstallation);
            }
            catch (Exception)
            {
                MessageBox.Show("Vælg venligst en installation blandt kundens installationer!");
            }

        }

        // AØ Fortryd
        private void btnFortryd_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
            this.Close();
        }


        // AØ TO DO Når formen lukkes, sendes kommando til opdatering af comboboks med virksomhedsdata se linie 529 i frmUdregner
        private void FrmVirksomhedsType_FormClosing_1(object sender, FormClosingEventArgs e)
        {
            this.DialogResult = DialogResult.OK;
        }

    }
}
